/*
date:20210315 pm015:58
key:1.超时了，因为复杂度是n平方
2.
*/
#include<math.h>
#include <algorithm>
#include <stdio.h>
#include<iostream>
#include<sstream>
#include<stdlib.h>
using namespace std;
const int P = 10007;
void change(int& a, int& b)
{
	int k = b;
	b = a;
	a = k;
}
int read_r(int* A, int p, int n)
{
	//i就是当前建筑的下标
	int i, j;
	int re = 0;
	//右上一个顶点变量
	int r_last_top = -1;
	//先观察i往后的
	for (i = p+1; i < n; i++)
	{
		//大于上一个右方极值（第一趟不受此影响故初始值为-1）且保持单调递增就可以看见
		if (r_last_top < A[i])
		{
			//cout << A[i];
			re++;
		}
		//最后一个就不管下面的了
		if (i == n - 1)
		{
			break;
		}
		//单调递增靠下面保证，发生递减的前一个作为新的右方极值
		if (A[i] > A[i + 1])
		{
			if (r_last_top<A[i])
			{
				r_last_top = A[i];
			}
			//cout << "\n";
		}
	}
	//左上一个顶点变量
	int l_last_top = -1;
	//先观察i往后的
	for (i = p - 1; i >=0; i--)
	{
		//大于上一个右方极值（第一趟不受此影响故初始值为-1）且保持单调递增就可以看见
		if (l_last_top < A[i])
		{
			//cout << A[i];
			re++;
		}
		//最后一个就不管下面的了
		if (i == 0)
		{
			break;
		}
		//单调递增靠下面保证，发生递减的前一个作为新的右方极值
		if (A[i] > A[i - 1])
		{
			if (l_last_top < A[i])
			{
				l_last_top = A[i];
			}
			//cout << "\n";
		}
	}
	return re;
}

int main()
{
	//6 8 3 4 1 2 5
	int i, n;
	cin >> n;
	int* A = new int[n];
	
	for (i = 0; i < n; i++)
	{
		cin >> A[i];
	}
	for (i = 0; i < n; i++)
	{
		cout << read_r(A, i, n)+1<<" ";
	}
	
	//从左往右，第一次单调递增顶点及以前都是能看见的
}
